/**
 * Project Name:BGI_DX
 * File Name:RoleService.java
 * Package Name:com.bgi.dx.module.sys.role.service.impl
 * Date:2014-10-31下午01:42:16
 * Copyright (c) 2014, BGI_DX All Rights Reserved.
 *
*/

package com.bgi.uims.module.sys.role.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.bgi.uims.common.dao.ICommonDao;
import com.bgi.uims.common.dto.PageVo;
import com.bgi.uims.module.sys.portal.dto.Portal;
import com.bgi.uims.module.sys.role.dto.RolePortal;
import com.bgi.uims.module.sys.role.dto.SysRoles;
import com.bgi.uims.pub.utils.Constant;


/**
 * ClassName:RoleService <br/>
 * Function: TODO ADD FUNCTION. <br/>
 * Reason:	 TODO ADD REASON. <br/>
 * Date:     2014-10-31 下午01:42:16 <br/>
 * @author   fukun
 * @version  
 * @since    JDK 1.7
 * @see 	 
 */
@Service
@Transactional
public class SysRolesService {

	@Resource
	private ICommonDao commonDao;
	
	/**
	 * 
	 * @Description：  查询角色信息
	 * @author: WEN
	 * @CreateDate:2015年3月31日 下午1:39:15
	 * @version: V1.0
	 */
	public PageVo findSysRoles(SysRoles role) {
		// TODO Auto-generated method stub
		role.setQuerySql(Constant.SQL_QUERY_ROLES);
		//未设置页码，默认不分页
		PageVo page=commonDao.query(role);
		return page;
	}

	/**
	 * 
	 * @Description：  保存/修改角色信息
	 * @author: WEN
	 * @CreateDate:2015年3月31日 下午1:37:36
	 * @version: V1.0
	 */
	public PageVo saveRole(SysRoles role) {
		// TODO Auto-generated method stub
		PageVo pageVo=new PageVo();
		if(role.getRolesId()!=null&&!"".equals(role.getRolesId()))
		{
			role.setUpdateSql(Constant.SQL_UPDATE_ROLES);
			if(commonDao.update(role)>0)
			{
				pageVo.setSuccess(true);
			}
			else
			{
				pageVo.setSuccess(false);
				pageVo.setMsg("未更新到数据!");
			}
		}
		else
		{
			//先验证是否已存在
			role.setQueryOneSql(Constant.SQL_QUERY_VERIFYSYSROLESNAME);
			Integer i=(Integer) commonDao.queryOne(role);
			if(i>0)
			{
				pageVo.setSuccess(false);
				pageVo.setMsg("角色名称已存在!");
			}
			else
			{
				role.setInsertSql(Constant.SQL_INSERT_ROLES);
				commonDao.insert(role);
				pageVo.setSuccess(true);
			}
		}
		return pageVo;
	}

	/**
	 * 
	 * @Description：  ID删除角色信息
	 * @author: WEN
	 * @CreateDate:2015年3月31日 下午1:34:45
	 * @version: V1.0
	 */
	public boolean deleteSysRoles(SysRoles role) {
		//删除角色和用户的中间表配置
		role.setDeleteSql(Constant.SQL_SAVE_ROLES_USER_BYROLEID);
		commonDao.delete(role);
		//删除角色和菜单的配置
		role.setDeleteSql(Constant.SQL_SAVE_ROLES_MENU_BYROLEID);
		commonDao.delete(role);
		//删除角色和资源的配置
		role.setDeleteSql(Constant.SQL_SAVE_ROLES_RESOURCE_BYROLEID);
		commonDao.delete(role);
		//删除角色和面板的配置
		role.setDeleteSql(Constant.SQL_SAVE_ROLES_PORTAL_BYROLEID);
		commonDao.delete(role);
		role.setDeleteSql(Constant.SQL_DELETE_ROLES);
		commonDao.delete(role);
		return true;
	}

	/**
	 * 
	 * @Description：  id号查询角色
	 * @author: WEN
	 * @CreateDate:2015年3月31日 下午1:38:33
	 * @version: V1.0
	 */
	public SysRoles findRoleById(SysRoles role) {
		// TODO Auto-generated method stub
		role.setQueryOneSql(Constant.SQL_QUERY_ROLESBYID);
		role=(SysRoles) commonDao.queryOne(role);
		return role;
	}
	
	/**
	 * 
	 * @Description：  查询角色所关联的面板
	 * @author: wuyaohong
	 * @CreateDate:2015年4月7日 下午5:14:47
	 * @version: V1.0
	 */
	@SuppressWarnings("unchecked")
	public List<RolePortal> getPortalByRoleId(SysRoles role) {
		role.setQuerySql(Constant.SQL_QUERY_SYSROLE_PORTAL);
		List<RolePortal> list = commonDao.query(role).getRows();
		return list;
	}
	
	/**
	 * 
	 * @Description：  获取角色和面板关联数据
	 * @author: wuyaohong
	 * @CreateDate:2015年3月26日 下午5:31:16
	 * @version: V1.0
	 */
	@SuppressWarnings("unchecked")
	public String getRolePortalInfo(SysRoles role){
		role.setQuerySql(Constant.SQL_QUERY_SYSROLE_PORTAL);
		List<RolePortal> list = commonDao.query(role).getRows();
		Portal portal = new Portal();
		portal.setPortalState("1");
		portal.setQuerySql(Constant.SQL_QUERY_PORTAL);
		List<Portal> portals = commonDao.query(portal).getRows();
		String htmlStr = "<tr>";
		List<String> ids = getIdList(list);
		for(int i = 0; i < portals.size(); i++){
			if(ids.contains(portals.get(i).getPortalId())){
				htmlStr += "<td width='140'><input type='checkbox' value='"+portals.get(i).getPortalId()+"' name='checkedPortal' checked='checked' />"+portals.get(i).getPortalName()+"</td>";
			}else{
				if (i == portals.size() - 1){
					htmlStr += "<td colspan='2' width='140'><input type='checkbox' value='"+portals.get(i).getPortalId()+"' name='checkedPortal'/>"+portals.get(i).getPortalName()+"</td>";
				}else{
					htmlStr += "<td width='140'><input type='checkbox' value='"+portals.get(i).getPortalId()+"' name='checkedPortal'/>"+portals.get(i).getPortalName()+"</td>";
				}
			}
			if((i+1)%3 == 0){
				htmlStr += "</tr><tr>";
			}if (i == portals.size()-1){
				htmlStr += "</tr>";
			}
		}
		return htmlStr;
	}
	
	/**
	 * 
	 * @Description：  保存角色面板授权
	 * @author: wuyaohong
	 * @CreateDate:2015年3月26日 下午8:46:39
	 * @version: V1.0
	 */
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public boolean saveRolePortal(RolePortal rolePortal){
		try {
			rolePortal.setDeleteSql(Constant.SQL_DELETE_ROLES_PORTAL);
			commonDao.delete(rolePortal);
			String roleId = rolePortal.getRoleId();
			if(rolePortal.getPortalId().length() > 0){
				String[] portalIds = rolePortal.getPortalId().split(",");
				List<RolePortal> rolePortals = new ArrayList<RolePortal>();
				for(int i = 0; i < portalIds.length; i++){
					RolePortal rp = new RolePortal();
					rp.setRoleId(roleId);
					rp.setPortalId(portalIds[i]);
					rolePortals.add(rp);
				}
				Map param = new HashMap();
				param.put("rolePortals", rolePortals);
				rolePortal.setInsertListSql(Constant.SQL_SAVE_ROLES_PORTAL);
				commonDao.insertList(rolePortal, param);
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 
	 * @Description：  转换成Id 集合
	 * @author: wuyaohong
	 * @CreateDate:2015年3月30日 下午3:31:06
	 * @version: V1.0
	 */
	public List<String> getIdList(List<RolePortal> rolePortals){
		List<String> list = new ArrayList<String>();
		for(RolePortal rp : rolePortals){
			list.add(rp.getPortalId());
		}
		return list;
	}

}

